最近在自己鼓捣node.js,尝试着使用express + mongoose搭建自己的web服务器,在这把mongoose的一些收获和知识点记录下来。
因为之前一直使用的是java操作MongoDB,对java实体类与Map对象的互转累觉不爱啊。

Connect to MongoDB

index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var mongoose = require('mongoose');
//连接Mongo数据库
mongoose.connect('mongodb://localhost/test');
//监听Mongo首次连接事件
db.once('open' ,() => {
console.log('连接数据库成功')
})
//监听Mongo异常并重连
db.on('error', function(error) {
console.error('Error in MongoDb connection: ' + error);
mongoose.disconnect();
});
db.on('close', function() {
console.log('数据库断开,重新连接数据库');
mongoose.connect(config.url, {server:{auto_reconnect:true}});
});

Schema

首次接触mongoose的是SchemaSchema可以理解为表结构的定义,虽然mongo并没有表这个概念,类似与javapojo实体类。
定义一个简单的Scheam

index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
//定义对象blogSchema
var blogSchema = new Schema({
title: String,
author: String,
body: String,
commets: [{body: String, date: Date}],
date: {type: Date, defult: Date.now},
hidden: boolean,
meta: {
votes: Number,
favs: Number
}
})
//将blogSchema发布为model,并且指定collection名为blog_c;
var blog = db.model('blog_c', blogSchema);

Scheam只是单纯的定义了mongoDB里面的document结构,通过Scheam可以定义字段的类型、唯一性、索引和验证;

Schema可以定义的字段的类型有:

  • String
  • Number
  • Date
  • Buffer
  • Boolean
  • Mixed
  • ObjectId
  • Array

一个包含所有类型Schema的实现

index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var blogSchema = new Schema({
title: String,
author: String,
body: String,
commets: [{body: String, date: Date}],
date: {type: Date, defult: Date.now},
hidden: boolean,
meta: {
votes: Number,
favs: Number
}
})

通过执行node index.js就可以看见你的mongo库里面插入了一条包含各种数据类型的字段的Document记录;

Misc

通过node+mongoose来操作Mongo确实比java来的方便的许多,比较JS原生支持json格式的数据。